--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / MicronWasmRuntimeOverride.js
Displaying Raw • Download
meshchatx/src/frontend/js/MicronWasmRuntimeOverride.js c0b0ddffd735a0d007c1be9a5e8563ec42fdafc0 (c0b0ddff) Text, 9.69 KB
T8b949e/**
* Optional runtime override for micron-parser-go WASM (IndexedDB).
* GitHub releases are verified with SHASUMS256.txt before install.
*/
Tff7b72const Te6edf3DB_NAME Tff7b72= Ta5d6ff"meshchatx_micron_wasm_override"Tb4b4b4;
Tff7b72const Te6edf3DB_VERSION Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3STORE Tff7b72= Ta5d6ff"kv"Tb4b4b4;
Tff7b72const Te6edf3KEY Tff7b72= Ta5d6ff"runtime_override"Tb4b4b4;
T8b949e/** @typedef {{ source: "github"|"upload", releaseTag: string, wasmSri: string, wasmBytes: ArrayBuffer, expectedSha256Hex: string|null }} MicronWasmRuntimeOverrideRecord */
Tff7b72export Tff7b72const Te6edf3MICRON_PARSER_GO_RELEASE_DOWNLOAD_BASE Tff7b72=
Ta5d6ff"https://github.com/Quad4-Software/Micron-Parser-Go/releases/download"Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3WASM_FILENAME Tff7b72= Ta5d6ff"micron-parser-go.wasm"Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3SHASUMS256_FILENAME Tff7b72= Ta5d6ff"SHASUMS256.txt"Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3MAX_WASM_OVERRIDE_BYTES Tff7b72= T79c0ff14 Tff7b72* T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4;
T8b949e/**
* Same-origin MeshChat API path; server proxies only Quad4-Software/Micron-Parser-Go release assets (CSP).
* @param {string} tag
* @param {string} assetName SHASUMS256.txt | micron-parser-go.wasm
*/
Tff7b72export Tff7b72function Te6edf3micronParserGoReleaseProxyUrlTb4b4b4(Te6edf3tagTb4b4b4, Te6edf3assetNameTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3params Tff7b72= Tff7b72new Te6edf3URLSearchParamsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3paramsTb4b4b4.Te6edf3setTb4b4b4(Ta5d6ff"tag"Tb4b4b4, Te6edf3tagTb4b4b4)Tb4b4b4;
Te6edf3paramsTb4b4b4.Te6edf3setTb4b4b4(Ta5d6ff"asset"Tb4b4b4, Te6edf3assetNameTb4b4b4)Tb4b4b4;
Tff7b72return Ta5d6ff`Ta5d6ff/api/v1/tools/micron-parser-go-release?Tffd700${Te6edf3paramsTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72async Tff7b72function Te6edf3readFetchErrorDetailTb4b4b4(Te6edf3resTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3ct Tff7b72= Te6edf3resTb4b4b4.Te6edf3headersTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"content-type"Tb4b4b4) Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ctTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"application/json"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3j Tff7b72= Tff7b72await Te6edf3resTb4b4b4.Te6edf3jsonTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3j Tff7b72&& Tff7b72typeof Te6edf3jTb4b4b4.Te6edf3error Tff7b72=== Ta5d6ff"string" Tff7b72&& Te6edf3jTb4b4b4.Te6edf3errorTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3jTb4b4b4.Te6edf3errorTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e/* ignore */
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657StringTb4b4b4(Te6edf3resTb4b4b4.Te6edf3statusTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3openDbTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4, Te6edf3rejectTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3req Tff7b72= Te6edf3indexedDBTb4b4b4.Te6edf3openTb4b4b4(Te6edf3DB_NAMETb4b4b4, Te6edf3DB_VERSIONTb4b4b4)Tb4b4b4;
Te6edf3reqTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3rejectTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3error Tff7b72|| Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"IndexedDB open failed"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3reqTb4b4b4.Te6edf3onupgradeneeded Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3db Tff7b72= Te6edf3reqTb4b4b4.Te6edf3resultTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3dbTb4b4b4.Te6edf3objectStoreNamesTb4b4b4.Te6edf3containsTb4b4b4(Te6edf3STORETb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3dbTb4b4b4.Te6edf3createObjectStoreTb4b4b4(Te6edf3STORETb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Te6edf3reqTb4b4b4.Te6edf3onsuccess Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3resolveTb4b4b4(Te6edf3reqTb4b4b4.Te6edf3resultTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Parses GNU/BSD shasum output for a single filename.
* @param {string} text
* @param {string} filename e.g. micron-parser-go.wasm
* @returns {string|null} lowercase hex sha256 or null if not found
*/
Tff7b72export Tff7b72function Te6edf3parseShasums256ForFilenameTb4b4b4(Te6edf3textTb4b4b4, Te6edf3filenameTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3text Tff7b72== Tff7b72null Tff7b72|| Te6edf3filename Tff7b72== Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3lines Tff7b72= Tffa657StringTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff/\r?\n/Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3raw Tff7b72of Te6edf3linesTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3line Tff7b72= Te6edf3rawTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3line Tff7b72|| Te6edf3lineTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"#"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3m Tff7b72= Te6edf3lineTb4b4b4.Te6edf3matchTb4b4b4(Ta5d6ff/^([a-fA-F0-9]{64})\s+\*?(\S+)\s*$/Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3mTb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3name Tff7b72= Te6edf3mTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3name Tff7b72=== Te6edf3filename Tff7b72|| Te6edf3nameTb4b4b4.Te6edf3endsWithTb4b4b4(Ta5d6ff`Ta5d6ff/Tffd700${Te6edf3filenameTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3mTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
T8b949e/** @param {ArrayBuffer} buf */
Tff7b72export Tff7b72async Tff7b72function Te6edf3sha256HexOfBufferTb4b4b4(Te6edf3bufTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3d Tff7b72= Tff7b72await Te6edf3cryptoTb4b4b4.Te6edf3subtleTb4b4b4.Te6edf3digestTb4b4b4(Ta5d6ff"SHA-256"Tb4b4b4, Te6edf3bufTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bytes Tff7b72= Tff7b72new Tffa657Uint8ArrayTb4b4b4(Te6edf3dTb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3hex Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72let Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3bytesTb4b4b4.Te6edf3lengthTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Te6edf3hex Tff7b72+= Te6edf3bytesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4.Te6edf3toStringTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4.Te6edf3padStartTb4b4b4(T79c0ff2Tb4b4b4, Ta5d6ff"0"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3hexTb4b4b4;
Tb4b4b4}
T8b949e/** @param {ArrayBuffer} buf */
Tff7b72export Tff7b72async Tff7b72function Te6edf3computeWasmSriSha384Tb4b4b4(Te6edf3bufTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3hash Tff7b72= Tff7b72await Te6edf3cryptoTb4b4b4.Te6edf3subtleTb4b4b4.Te6edf3digestTb4b4b4(Ta5d6ff"SHA-384"Tb4b4b4, Te6edf3bufTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3base64 Tff7b72= Te6edf3btoaTb4b4b4(Tffa657StringTb4b4b4.Te6edf3fromCharCodeTb4b4b4(Tb4b4b4...Tff7b72new Tffa657Uint8ArrayTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Ta5d6ff`Ta5d6ffsha384-Tffd700${Te6edf3base64Tffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Fetches SHASUMS256.txt and WASM from a GitHub release tag; verifies SHA-256 of WASM.
* Does not write to storage.
* @param {string} tag e.g. v1.0.5
* @param {{ signal?: AbortSignal }} [opts]
* @returns {Promise<Omit<MicronWasmRuntimeOverrideRecord, never>>}
*/
Tff7b72export Tff7b72async Tff7b72function Te6edf3fetchWasmFromGitHubReleaseVerifiedTb4b4b4(Te6edf3tagTb4b4b4, Te6edf3opts Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72const Tb4b4b4{ Te6edf3signal Tb4b4b4} Tff7b72= Te6edf3optsTb4b4b4;
Tff7b72const Te6edf3t Tff7b72= Tffa657StringTb4b4b4(Te6edf3tag Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3tTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Micron WASM update: release tag is required"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3sumsResTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3sumsRes Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Te6edf3micronParserGoReleaseProxyUrlTb4b4b4(Te6edf3tTb4b4b4, Te6edf3SHASUMS256_FILENAMETb4b4b4)Tb4b4b4, Tb4b4b4{ Te6edf3signalTb4b4b4, Te6edf3cacheTff7b72: Ta5d6ff"no-store" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3msg Tff7b72= Te6edf3e Tff7b72&& Te6edf3eTb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"AbortError" Tff7b72? Ta5d6ff"Request aborted" Tff7b72: Tb4b4b4(Te6edf3e Tff7b72&& Te6edf3eTb4b4b4.Te6edf3messageTb4b4b4) Tff7b72|| Tffa657StringTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffMicron WASM update: could not fetch release metadata (Tffd700${Te6edf3msgTffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3sumsResTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3detail Tff7b72= Tff7b72await Te6edf3readFetchErrorDetailTb4b4b4(Te6edf3sumsResTb4b4b4)Tb4b4b4;
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffMicron WASM update: SHASUMS256 fetch failed (Tffd700${Te6edf3detailTffd700}Ta5d6ff). Check the tag and your network.Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3sumsTextTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3sumsText Tff7b72= Tff7b72await Te6edf3sumsResTb4b4b4.Te6edf3textTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffMicron WASM update: could not read SHASUMS256 (Tffd700${Te6edf3e Tff7b72&& Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3expectedHex Tff7b72= Te6edf3parseShasums256ForFilenameTb4b4b4(Te6edf3sumsTextTb4b4b4, Te6edf3WASM_FILENAMETb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3expectedHexTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffMicron WASM update: Tffd700${Te6edf3WASM_FILENAMETffd700}Ta5d6ff not listed in Tffd700${Te6edf3SHASUMS256_FILENAMETffd700}Ta5d6ff for this release.Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3wasmResTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3wasmRes Tff7b72= Tff7b72await Te6edf3fetchTb4b4b4(Te6edf3micronParserGoReleaseProxyUrlTb4b4b4(Te6edf3tTb4b4b4, Te6edf3WASM_FILENAMETb4b4b4)Tb4b4b4, Tb4b4b4{ Te6edf3signalTb4b4b4, Te6edf3cacheTff7b72: Ta5d6ff"no-store" Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3msg Tff7b72= Te6edf3e Tff7b72&& Te6edf3eTb4b4b4.Te6edf3name Tff7b72=== Ta5d6ff"AbortError" Tff7b72? Ta5d6ff"Request aborted" Tff7b72: Tb4b4b4(Te6edf3e Tff7b72&& Te6edf3eTb4b4b4.Te6edf3messageTb4b4b4) Tff7b72|| Tffa657StringTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4;
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffMicron WASM update: could not download WASM (Tffd700${Te6edf3msgTffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3wasmResTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3detail Tff7b72= Tff7b72await Te6edf3readFetchErrorDetailTb4b4b4(Te6edf3wasmResTb4b4b4)Tb4b4b4;
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffMicron WASM update: WASM download failed (Tffd700${Te6edf3detailTffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3bufTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3buf Tff7b72= Tff7b72await Te6edf3wasmResTb4b4b4.Te6edf3arrayBufferTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffMicron WASM update: could not read WASM body (Tffd700${Te6edf3e Tff7b72&& Te6edf3eTb4b4b4.Te6edf3messageTffd700}Ta5d6ff)Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3bufTb4b4b4.Te6edf3byteLength Tff7b72> Te6edf3MAX_WASM_OVERRIDE_BYTESTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffMicron WASM update: WASM exceeds maximum size (Tffd700${Te6edf3MAX_WASM_OVERRIDE_BYTESTffd700}Ta5d6ff bytes).Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3bufTb4b4b4.Te6edf3byteLength Tff7b72< T79c0ff4096Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Micron WASM update: WASM file is too small to be valid."Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3actualHex Tff7b72= Tff7b72await Te6edf3sha256HexOfBufferTb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3actualHex Tff7b72!== Te6edf3expectedHexTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(
Ta5d6ff"Micron WASM update: SHA-256 mismatch after download. Refusing to install (possible tampering or corrupt transfer)."
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3wasmSri Tff7b72= Tff7b72await Te6edf3computeWasmSriSha384Tb4b4b4(Te6edf3bufTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3sourceTff7b72: Ta5d6ff"github"Tb4b4b4,
Te6edf3releaseTagTff7b72: Te6edf3tTb4b4b4,
Te6edf3wasmSriTb4b4b4,
Te6edf3wasmBytesTff7b72: Te6edf3bufTb4b4b4,
Te6edf3expectedSha256HexTff7b72: Te6edf3expectedHexTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72function Te6edf3assertSriTb4b4b4(Te6edf3wasmSriTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3wasmSri Tff7b72!== Ta5d6ff"string" Tff7b72|| Tff7b72!Ta5d6ff/^sha384-[A-Za-z0-9+/=]+$/Tb4b4b4.Te6edf3testTb4b4b4(Te6edf3wasmSriTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Micron WASM update: invalid SRI format"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* @param {MicronWasmRuntimeOverrideRecord} record
*/
Tff7b72export Tff7b72async Tff7b72function Te6edf3setMicronWasmRuntimeOverrideTb4b4b4(Te6edf3recordTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3record Tff7b72|| Tff7b72!Te6edf3recordTb4b4b4.Te6edf3wasmBytesTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Micron WASM update: missing WASM data"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3buf Tff7b72= Te6edf3recordTb4b4b4.Te6edf3wasmBytesTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Te6edf3buf Tff7b72instanceof Tffa657ArrayBufferTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"Micron WASM update: wasmBytes must be an ArrayBuffer"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3bufTb4b4b4.Te6edf3byteLength Tff7b72> Te6edf3MAX_WASM_OVERRIDE_BYTESTb4b4b4) Tb4b4b4{
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff`Ta5d6ffMicron WASM update: WASM exceeds maximum size (Tffd700${Te6edf3MAX_WASM_OVERRIDE_BYTESTffd700}Ta5d6ff bytes).Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3assertSriTb4b4b4(Te6edf3recordTb4b4b4.Te6edf3wasmSriTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3source Tff7b72= Te6edf3recordTb4b4b4.Te6edf3source Tff7b72=== Ta5d6ff"upload" Tff7b72? Ta5d6ff"upload" Tff7b72: Ta5d6ff"github"Tb4b4b4;
Tff7b72const Te6edf3releaseTag Tff7b72= Tffa657StringTb4b4b4(Te6edf3recordTb4b4b4.Te6edf3releaseTag Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tff7b72|| Tb4b4b4(Te6edf3source Tff7b72=== Ta5d6ff"github" Tff7b72? Ta5d6ff"unknown" Tff7b72: Ta5d6ff"upload"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3expectedSha256Hex Tff7b72= Te6edf3recordTb4b4b4.Te6edf3expectedSha256Hex Tff7b72== Tff7b72null Tff7b72? Tff7b72null Tff7b72: Tffa657StringTb4b4b4(Te6edf3recordTb4b4b4.Te6edf3expectedSha256HexTb4b4b4)Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3db Tff7b72= Tff7b72await Te6edf3openDbTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3tx Tff7b72= Te6edf3dbTb4b4b4.Te6edf3transactionTb4b4b4(Te6edf3STORETb4b4b4, Ta5d6ff"readwrite"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3st Tff7b72= Te6edf3txTb4b4b4.Te6edf3objectStoreTb4b4b4(Te6edf3STORETb4b4b4)Tb4b4b4;
Te6edf3stTb4b4b4.Te6edf3putTb4b4b4(
Tb4b4b4{
Te6edf3sourceTb4b4b4,
Te6edf3releaseTagTb4b4b4,
Te6edf3wasmSriTff7b72: Te6edf3recordTb4b4b4.Te6edf3wasmSriTb4b4b4,
Te6edf3wasmBytesTff7b72: Te6edf3bufTb4b4b4,
Te6edf3expectedSha256HexTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3KEY
Tb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4, Te6edf3rejectTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3txTb4b4b4.Te6edf3oncomplete Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3resolveTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3txTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3rejectTb4b4b4(Te6edf3txTb4b4b4.Te6edf3error Tff7b72|| Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"IndexedDB write failed"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3txTb4b4b4.Te6edf3onabort Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3rejectTb4b4b4(Te6edf3txTb4b4b4.Te6edf3error Tff7b72|| Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"IndexedDB write aborted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3dbTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e/** @returns {Promise<MicronWasmRuntimeOverrideRecord|null>} */
Tff7b72export Tff7b72async Tff7b72function Te6edf3getMicronWasmRuntimeOverrideTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3db Tff7b72= Tff7b72await Te6edf3openDbTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3tx Tff7b72= Te6edf3dbTb4b4b4.Te6edf3transactionTb4b4b4(Te6edf3STORETb4b4b4, Ta5d6ff"readonly"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3st Tff7b72= Te6edf3txTb4b4b4.Te6edf3objectStoreTb4b4b4(Te6edf3STORETb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3raw Tff7b72= Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4, Te6edf3rejectTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3r Tff7b72= Te6edf3stTb4b4b4.Te6edf3getTb4b4b4(Te6edf3KEYTb4b4b4)Tb4b4b4;
Te6edf3rTb4b4b4.Te6edf3onsuccess Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3resolveTb4b4b4(Te6edf3rTb4b4b4.Te6edf3result Tff7b72|| Tff7b72nullTb4b4b4)Tb4b4b4;
Te6edf3rTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3rejectTb4b4b4(Te6edf3rTb4b4b4.Te6edf3error Tff7b72|| Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"IndexedDB read failed"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3raw Tff7b72|| Tff7b72!Te6edf3rawTb4b4b4.Te6edf3wasmBytes Tff7b72|| Tff7b72!Te6edf3rawTb4b4b4.Te6edf3wasmSriTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{
Te6edf3sourceTff7b72: Te6edf3rawTb4b4b4.Te6edf3source Tff7b72=== Ta5d6ff"upload" Tff7b72? Ta5d6ff"upload" Tff7b72: Ta5d6ff"github"Tb4b4b4,
Te6edf3releaseTagTff7b72: Tffa657StringTb4b4b4(Te6edf3rawTb4b4b4.Te6edf3releaseTag Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4,
Te6edf3wasmSriTff7b72: Tffa657StringTb4b4b4(Te6edf3rawTb4b4b4.Te6edf3wasmSriTb4b4b4)Tb4b4b4,
Te6edf3wasmBytesTff7b72: Te6edf3rawTb4b4b4.Te6edf3wasmBytesTb4b4b4,
Te6edf3expectedSha256HexTff7b72: Te6edf3rawTb4b4b4.Te6edf3expectedSha256Hex Tff7b72== Tff7b72null Tff7b72? Tff7b72null Tff7b72: Tffa657StringTb4b4b4(Te6edf3rawTb4b4b4.Te6edf3expectedSha256HexTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3dbTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72export Tff7b72async Tff7b72function Te6edf3clearMicronWasmRuntimeOverrideTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3db Tff7b72= Tff7b72await Te6edf3openDbTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3tx Tff7b72= Te6edf3dbTb4b4b4.Te6edf3transactionTb4b4b4(Te6edf3STORETb4b4b4, Ta5d6ff"readwrite"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3st Tff7b72= Te6edf3txTb4b4b4.Te6edf3objectStoreTb4b4b4(Te6edf3STORETb4b4b4)Tb4b4b4;
Te6edf3stTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3KEYTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72new Tffa657PromiseTb4b4b4(Tb4b4b4(Te6edf3resolveTb4b4b4, Te6edf3rejectTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3txTb4b4b4.Te6edf3oncomplete Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3resolveTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3txTb4b4b4.Te6edf3onerror Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3rejectTb4b4b4(Te6edf3txTb4b4b4.Te6edf3error Tff7b72|| Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"IndexedDB delete failed"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3txTb4b4b4.Te6edf3onabort Tff7b72= Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3rejectTb4b4b4(Te6edf3txTb4b4b4.Te6edf3error Tff7b72|| Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"IndexedDB delete aborted"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3dbTb4b4b4.Te6edf3closeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────